#include <iostream>

using namespace std;

struct ListNode
{
	int data;
	ListNode * next;
};


// 创建单链表 尾插法
void CreateNode(ListNode * pHead)
{
	ListNode * head = pHead;
	for(int i = 1; i< 4;i++)
	{
		ListNode * temp  = new ListNode;
		head->next = temp;
		temp->data = i;
		temp->next = NULL;
		head = temp;
	}
}

// 将创建好的单链表进行打印。
void PrintNode(ListNode * node)
{
	if(node->next == NULL)
	{
		cout << "链表为空"<<endl;
		return;
	}
	while (node->next != NULL)
	{
		node = node->next;
		cout  << node->data <<endl;

	}

}

// 将链表进行反转
void ReverseNode(ListNode * node)
{
    ListNode * head = node;
    ListNode * final = NULL;
    head = head ->next;
    while (head != NULL)
    {
        ListNode * temp = head->next;    //这一步是为了记住temp的位置，方便让head找到temp的位置信息
        head ->next = final;
        final = head;
        head = temp;
    }

    while (final != NULL)
    {
        cout  << final->data <<endl;
        final = final->next;
    }

}

// 将指定位置数据进行插入
void InsertNode(ListNode * node)
{
    int num = 1;
    ListNode * head = node;
    while (head ->next != NULL)
    {
        head = head->next;
        if(num == 4)
        {
            ListNode *  temp = new ListNode;
            temp->data = 666;
            temp->next = head->next;
            head->next = temp;
            return;
        }
        num ++;

    }

}

// 单链表删除指定位置数据
void DeleteNode(ListNode * phead)
{
    int i =1;
    ListNode * head = phead;
    while (head->next != NULL)
    {
        head = head->next;
        if (i == 3)
        {
            head->next = head->next->next;
        }
        i++;
    }

    return;
}

// 单链表修改指定位置数据
void UpdateNode(ListNode * phead)
{
    ListNode * head = phead;
    int num = 1;
    while (head->next != NULL)
    {
        head = head->next;
        if(num == 4) //不算头指针的第四个指针，我们把这个数据修改为888
        {
            head->data = 888;
        }
        num ++ ;
    }

}

//int main()
//{
//	ListNode * head = new ListNode;
//	head->data = 0;
//	head->next = NULL;
//	CreateNode(head);
//	//InsertNode(head);
//	//DeleteNode(head);
//    //UpdateNode(head);
//	PrintNode(head);
//	cout << "反转链表后" <<endl;
//	ReverseNode(head);
//
//}